package com.hwh.bootdemoweb;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class Java8lianxi {
    /**
     * 题目
     * (1) 找出2011年发生的所有交易，并按交易额排序（从低到高）。
     * (2) 交易员都在哪些不同的城市工作过？
     * (3) 查找所有来自于剑桥的交易员，并按姓名排序。
     * (4) 返回所有交易员的姓名字符串，按字母顺序排序。
     * (5) 有没有交易员是在米兰工作的？
     * (6) 打印生活在剑桥的交易员的所有交易额。
     * (7) 所有交易中，最高的交易额是多少？
     * (8) 找到交易额最小的交易。
     * ————————————————
     * 版权声明：本文为CSDN博主「SmileJosiah」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
     * 原文链接：https://blog.csdn.net/qq_37024565/article/details/105159933
     */
    public static void main(String[] args) {
        Trader raoul = new Trader("Raoul", "Cambridge");
        Trader mario = new Trader("Mario","Milan");
        Trader alan = new Trader("Alan","Cambridge");
        Trader brian = new Trader("Brian","Cambridge");
        List<Transaction> transactions = Arrays.asList(
                new Transaction(brian, 2011, 300),
                new Transaction(raoul, 2012, 1000),
                new Transaction(raoul, 2011, 400),
                new Transaction(mario, 2012, 710),
                new Transaction(mario, 2012, 700),
                new Transaction(alan, 2012, 950)
        );
       // (1) 找出2011年发生的所有交易，并按交易额排序（从低到高）。
        List<Transaction> collect = transactions.stream()
                .filter((transaction -> transaction.getYear() == 2011))
                .sorted(Comparator.comparing(transaction -> transaction.getValue()))
                .collect(Collectors.toList());
        System.out.println(collect);
        System.out.println("--------------------------------------");
        //(2) 交易员都在哪些不同的城市工作过？
        List<String> collect1 = transactions.stream()
                .map(transaction -> transaction.getTrader().getCity())
                .distinct()
                .collect(Collectors.toList());
        System.out.println(collect1);
        System.out.println("--------------------------------------");
        //查找所有来自于剑桥的交易员，并按姓名排序。
        List<Trader> cambridge = transactions.stream()
                .map(Transaction::getTrader)
                .filter(trader -> trader.getCity().equals("Cambridge"))
                .sorted(Comparator.comparing(Trader::getName))
                .distinct()
                .collect(Collectors.toList());
        System.out.println(cambridge);
        System.out.println("--------------------------------------");
        //返回所有交易员的姓名字符串，按字母顺序排序。
        transactions.stream()
                .map(Transaction::getTrader)
                .sorted(Comparator.comparing(Trader::getName))
                .distinct()
                .forEach(System.out::println);
        System.out.println("--------------------------------------");
        //有没有交易员是在米兰工作的？
        System.out.println(transactions.stream().anyMatch(transaction -> transaction.getTrader().getCity().equals("Milan")));
        System.out.println("--------------------------------------");

        //打印生活在剑桥的交易员的所有交易额。
        transactions.stream()
                .filter(transaction -> transaction.getTrader().getCity().equals("Cambridge"))
                .map(Transaction::getValue)
                .forEach(System.out::println);
        System.out.println("--------------------------------------");
        //所有交易中，最高的交易额是多少？
        System.out.println(transactions.stream().max(Comparator.comparing(Transaction::getValue)));
    }
}
@Data
@AllArgsConstructor
class Trader{
    private String name;
    private String city;
}
@Data
@AllArgsConstructor
class Transaction{
    private  Trader trader;
    private  int year;
    private  int value;
}